

#ifndef UC_GEBLOCK3D_H
#define UC_GEBLOCK3D_H

#include "zgeent3d.h"
#pragma pack (push, 8)
class UcGePoint3d;
class UcGeVector3d;

class 
GE_DLLEXPIMPORT
UcGeBoundBlock3d : public UcGeEntity3d
{
public:
                    
	UcGeBoundBlock3d ();
	UcGeBoundBlock3d (const UcGePoint3d& base, const UcGeVector3d& dir1,
					  const UcGeVector3d& dir2, const UcGeVector3d& dir3);
	UcGeBoundBlock3d (const UcGeBoundBlock3d& block);

    void              getMinMaxPoints  (UcGePoint3d& point1,
								        UcGePoint3d& point2) const;
    void              get              (UcGePoint3d& base,
								        UcGeVector3d& dir1,
								        UcGeVector3d& dir2,
								        UcGeVector3d& dir3) const;

    UcGeBoundBlock3d& set              (const UcGePoint3d& point1,
								        const UcGePoint3d& point2);
    UcGeBoundBlock3d& set              (const UcGePoint3d& base,
								        const UcGeVector3d& dir1,
								        const UcGeVector3d& dir2,
								        const UcGeVector3d& dir3);

    UcGeBoundBlock3d& extend           (const UcGePoint3d& point);

    UcGeBoundBlock3d& swell            (double distance);

    ZSoft::Boolean    contains         (const UcGePoint3d& point) const;
    ZSoft::Boolean    isDisjoint       (const UcGeBoundBlock3d& block) const;

    UcGeBoundBlock3d& operator =       (const UcGeBoundBlock3d& block);

    ZSoft::Boolean     isBox    () const;
    UcGeBoundBlock3d&  setToBox (ZSoft::Boolean);
};

#pragma pack (pop)
#endif
